package org.agent.aigccore.model.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.time.OffsetDateTime;

/**
 * 日志查询DTO
 * 封装日志查询的各种条件参数
 */
@Data
public class LogQueryDTO {
    /**
     * 日志类型
     * OPERATION(操作日志)、SCHEDULE(调度日志)、DEVICE(设备日志)、SYSTEM(系统日志)
     */
    private String logType;
    
    /**
     * 日志级别
     * DEBUG, INFO, WARN, ERROR, FATAL等
     */
    private String level;
    
    /**
     * 应用名称
     */
    private String app;
    
    /**
     * 模块名称
     */
    private String module;
    
    /**
     * 操作名称
     */
    private String action;
    
    /**
     * 用户ID
     */
    private String userId;
    
    /**
     * 是否成功
     */
    private Boolean success;
    
    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "Asia/Shanghai")
    private OffsetDateTime startTime;
    
    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "Asia/Shanghai")
    private OffsetDateTime endTime;
    
    /**
     * 搜索关键词
     * 用于全文检索
     */
    private String keyword;
    
    /**
     * 设备ID
     * IoT设备相关日志的过滤条件
     */
    private String deviceId;
    
    /**
     * 机器人ID
     * 调度机器人相关日志的过滤条件
     */
    private String robotId;
    
    /**
     * 任务ID
     * 调度任务相关日志的过滤条件
     */
    private String taskId;
    
    /**
     * extra JSONB字段名
     * 用于JSONB字段的条件查询
     */
    private String extraField;
    
    /**
     * extra JSONB字段值
     * 用于JSONB字段的条件查询
     */
    private String extraValue;
    
    /**
     * deviceData JSONB字段名
     * 用于JSONB字段的条件查询
     */
    private String deviceDataField;
    
    /**
     * deviceData JSONB字段值
     * 用于JSONB字段的条件查询
     */
    private String deviceDataValue;
    
    /**
     * 当前页码
     * 用于分页查询
     */
    private Integer pageNum = 1;
    
    /**
     * 每页记录数
     * 用于分页查询
     */
    private Integer pageSize = 10;
    
    /**
     * 获取偏移量
     * 计算分页查询的起始位置
     * @return 偏移量
     */
    public Integer getOffset() {
        return (pageNum - 1) * pageSize;
    }
    
    // Getters and Setters for new fields
    public String getExtraField() {
        return extraField;
    }
    
    public void setExtraField(String extraField) {
        this.extraField = extraField;
    }
    
    public String getExtraValue() {
        return extraValue;
    }
    
    public void setExtraValue(String extraValue) {
        this.extraValue = extraValue;
    }
    
    public String getDeviceDataField() {
        return deviceDataField;
    }
    
    public void setDeviceDataField(String deviceDataField) {
        this.deviceDataField = deviceDataField;
    }
    
    public String getDeviceDataValue() {
        return deviceDataValue;
    }
    
    public void setDeviceDataValue(String deviceDataValue) {
        this.deviceDataValue = deviceDataValue;
    }
}